package com.loud.swagger.annotation;

import com.loud.swagger.config.GatewaySwaggerAutoConfiguration;
import com.loud.swagger.config.SwaggerAutoConfiguration;
import org.springframework.context.annotation.Import;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

import java.lang.annotation.*;

// Annotation所修饰的对象范围：Annotation可被用于 packages、types（类、接口、枚举、Annotation类型）、
// 类型成员（方法、构造方法、成员变量、枚举值）、方法参数和本地变量（如循环变量、catch参数）。在Annotation类型的声明中使用了target可更加明晰其修饰的目标。
@Target({ElementType.TYPE})
// SOURCE：注解只保留在源文件，当Java文件编译成class文件的时候，注解被遗弃；被编译器忽略
// CLASS：注解被保留到class文件，但jvm加载class文件时候被遗弃，这是默认的生命周期
// RUNTIME：注解不仅被保存到class文件中，jvm加载class文件之后，仍然存在
@Retention(RetentionPolicy.RUNTIME)
// 用于描述其它类型的annotation应该被作为被标注的程序成员的公共API，因此可以被例如javadoc此类的工具文档化。
@Documented
@EnableSwagger2
// 表示这个是注解
@Inherited
// @Import只能用在类上 ，@Import通过快速导入的方式实现把实例加入spring的IOC容器中
@Import({ SwaggerAutoConfiguration.class, GatewaySwaggerAutoConfiguration.class })
public @interface EnableLoudSwagger2 {
}
